home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Mac-Source 1994 July
/
Mac-Source_July_1994.iso
/
C and C++
/
Entertainment
/
luff stuff
/
luff⁄inmove.c
< prev
next >
Wrap
C/C++ Source or Header
|
1985-11-08
|
4KB
|
182 lines
#include "MacLuff.h"
/* Routin for input of moves and commands (Main event loop) */
inmove(x, y) int *x, *y;{
FlushEvents(everyEvent, 0);
HiliteMenu(0);
while(TRUE){
GetNextEvent(everyEvent, &my_event);
adjust_cursor();
mouse_p.h = my_event.where.h;
mouse_p.v = my_event.where.v;
GlobalToLocal(&mouse_p);
switch(my_event.what){
case mouseDown:
if(playcnt){
DisableItem(my_menus[3], YOUR_MOVE);
EnableItem(my_menus[3], REMOVE);
}
else{
EnableItem(my_menus[3], YOUR_MOVE);
DisableItem(my_menus[3], REMOVE);
}
switch(FindWindow(&my_event.where, &which_w)){
case inMenuBar:
if( do_command(MenuSelect(&my_event.where)) )
return;
FlushEvents(everyEvent, 0);
break;
case inContent:
if(message_flag){
EraseRect(&message_r);
draw_holes();
message_flag = FALSE;
}
if( !done_flag )
if( the_w_click(x, y) )
return;
break;
case inDrag:
DragWindow(which_w, &my_event.where, &drag_r);
break;
}
break;
case updateEvt:
BeginUpdate(the_w);
utboard();
EndUpdate(the_w);
break;
}
}
}
do_command(help) int help;{
char who;
int x, y;
the_menu = HiWord(help);
the_item = LoWord(help);
switch(the_menu){
case APPLE:
say_something();
break;
case FILE:
switch(the_item){
case NEW_GAME:
if(message_flag){
EraseRect(&message_r);
draw_holes();
message_flag = FALSE;
}
for(x = 0; x < XZIZE; x++)
for(y = 0; y < YZIZE; y++){
if(board[x][y] != ' '){
play[x][y] = 0;
board[x][y] = ' ';
update(x, y);
draw_empty(x, y);
}
}
EnableItem(my_menus[3], HINT);
EnableItem(my_menus[3], SHOW_GAME);
done_flag = FALSE;
playcnt = 0;
break;
case QUIT:
ExitToShell();
break;
}
break;
case HELP:
say_something_else();
break;
case COMMAND:
if(message_flag){
EraseRect(&message_r);
draw_holes();
message_flag = FALSE;
}
switch(the_item){
case YOUR_MOVE:
x = XZIZE/2;
y = YZIZE/2;
board[x][y] = 'o';
update(x, y);
play[x][y] = ++playcnt;
draw_o(x, y);
break;
case REMOVE:
while(TRUE){
if(playcnt == 0)
break;
for(x = 0; x < XZIZE; x++)
for(y = 0; y < YZIZE; y++)
if(play[x][y] == playcnt){
play[x][y] = 0;
who = board[x][y];
board[x][y] = ' ';
update(x, y);
draw_empty(x, y);
}
playcnt--;
if(who == 'x')
break;
}
EnableItem(my_menus[3], HINT);
EnableItem(my_menus[3], SHOW_GAME);
done_flag = FALSE;
break;
case SHOW_GAME:
slf = TRUE;
draw_message("Push mouse button to stop");
return(TRUE);
break;
case HINT:
if(chose('x', &x, &y))
draw_hint(x, y);
break;
}
break;
}
HiliteMenu(0);
return(FALSE);
}
adjust_cursor(){
if(PtInRect(&mouse_p, &play_r))
SetCursor(&finger);
else
SetCursor(&QD->arrow);
}
the_w_click(x, y) int *x, *y;{
if(PtInRect(&mouse_p, &play_r)){
*x = mouse_p.h/15;
*y = (mouse_p.v - 35)/15;
if(board[*x][*y] == ' '){
InvertRect(&xy_r[*x][*y]);
while(StillDown());
InvertRect(&xy_r[*x][*y]);
return(TRUE);
}
}
return(FALSE);
}
say_something(){
EraseRect(&play_r);
MoveTo(50, 50); DrawString("Luff is written by:");
MoveTo(50, 80); DrawString("Roland Karlsson");
MoveTo(50, 95); DrawString("Dpt. of Telecomm. & Computer Systems");
MoveTo(50, 110); DrawString("Royal Institute of Technology");
MoveTo(50, 125); DrawString("S-100 44 Stockholm, SWEDEN");
MoveTo(50, 150); DrawString("roland@ttds");
while( ! Button() );
utboard();
}
say_something_else(){
draw_message("Just point and push until you get 5 in a row");
}